home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 18 / AMIGAplus Sonderheft 18 (1999)(ICP)(DE)[!].iso / Forum / MichaelRoth / 3-3-99 / code / code2.asm < prev    next >
Assembly Source File  |  1998-08-15  |  5KB  |  174 lines

  1.  
  2. ;// Include
  3.           Include  assem:macro/Dir
  4.           Include  assem:macro/Exec.m
  5.           Include  assem:macro/Dos.m
  6.           Include  Dos/DosExtens.i
  7.           include  macro/filelength
  8. ;\\
  9.  
  10. ;// Libraries öffnen
  11.           OpenDos  37
  12. ;\\
  13.  
  14. ;//ReadArgs
  15.           move.l   #inputstr,d1                  ; Eingabe String
  16.           move.l   #arry,d2                      ; Arry
  17.           move.l   #0,d3                         ; Keine Externe Structur
  18.           Dos      ReadArgs                      ; Argumente Lesen
  19.           move.l   d0,rdargs                     ; speichern
  20.           bne.s    .1                            ; prüfen ob alles o.k.
  21.           error    cleanup,20                    ; o.k. >.1 Ansonsten Fehlermeldung beenden
  22. .1                                               ;
  23.           lea   arry,a0                          ; Arry nach a0
  24. ;\\
  25.  
  26. ;//File Öffnen und größe bestimmen
  27.           move.l   (a0),d1
  28.           move.l   #MODE_OLDFILE,d2              ; 1005
  29.           Dos      Open                          ; File Öffnen
  30.           bne.s    .2
  31.           error    cleanup,20
  32. .2
  33.           move.l   d0,fh
  34.           filelength fh,filelänge                ; Filelänge bestimmen
  35. ;\\
  36.  
  37. ;// Speicher Reservieren
  38.          move.l    filelänge,d0
  39.          move.l    #MEMF_CLEAR,d1
  40.          Exec      AllocMem
  41.          move.l    d0,memblock
  42.          bne.s     .memallockok
  43.          error     cleanup,20
  44. .memallockok
  45. ;\\
  46.  
  47. ;// File einlesen
  48.          move.l   fh,d1
  49.          move.l   memblock,d2
  50.          move.l   filelänge,d3
  51.          Dos      Read
  52.          cmp.l    filelänge,d0
  53.          beq.s    .readok
  54.          error    cleanup,20
  55. .readok
  56. ;\\
  57.  
  58. ;//Code
  59.          move.l   memblock,a0
  60.          move.l   filelänge,d0
  61.          lea      ver,a1
  62.          move.l   #ver,d1
  63.          move.l   #ver,d2
  64.          sub.l    d2,d1
  65.  
  66.          move.l   #32,d2
  67.  
  68. ; A0   -> Buffer zum Codieren
  69. ; D0   -> Länge des Buffers
  70. ; D2.b -> Anfangszeichen des VQ's
  71. ; A1   -> KEy
  72. ; D1   -> Länge
  73.  
  74. ; SUBREGISTER
  75. ; A2 -> Endadresse ds Buffers
  76. ; A3 -> Endadresse des Keys
  77. ; D7 -> StartAdresse des Keys
  78. ; D4 -> Hilfsregister
  79.          lea       (a0,d0.l),a2                  ; Endadresse des Buffers
  80.          lea       (a1,d1.l),a3                  ; und Endadresse des KEy Berechnen
  81.          move.l    a1,d7                         ; Adresse des Keys wegen Blockcodierung aufhaben
  82. .loop
  83.          add.b     d2,(a0)
  84.          move.b    (A1)+,d4
  85.          add.b     d4,(a0)+
  86.  
  87.          cmp.l     a1,a3                         ; Schlüsselvorrat zu Ende ?
  88.          bhi.s     .goon                         ; Nein -> Weiter
  89.          move.l    d7,a1                         ; Schlüssel von vorne verwenden
  90. .goon
  91.          cmp.l     a0,a2                         ; Buffer am ende ?
  92.          bhi.s     .loop                         ; nein -> nächsten Zeichen
  93. ;\\
  94.  
  95. ;// Zielfile Öffnen
  96.          lea       arry,a0                          ; Arry nach a0
  97.          move.l    4(a0),d1
  98.          move.l    #MODE_NEWFILE,d2
  99.          Dos       Open
  100.          move.l    d0,d7
  101.          bne       .ok
  102.          error     cleanup,20
  103. .ok
  104.  
  105.          move.l    d7,d1
  106.          move.l    memblock,d2
  107.          move.l    filelänge,d3
  108.          Dos       Write
  109.  
  110.          move.l    d7,d1
  111.          Dos       Close
  112. ;\\
  113.  
  114. ;// CleanUp
  115. cleanup
  116.           move.l   rdargs,d1
  117.           beq.s    .end                          ; Argumente da ?
  118.           Dos      FreeArgs                      ; Wenn Nein beenden
  119.  
  120.           move.l   fh,d1
  121.           beq.s    .1                            ; File geöffnet
  122.           Dos      Close                         ; Wenn nein weiter
  123. .1
  124.           move.l    memblock,d0
  125.           beq.s     .2
  126.           move.l    d0,a1
  127.           move.l    filelänge,d0
  128.           Exec      FreeMem
  129. .2
  130.           move.l   fh2,d1
  131.           beq.s    .3                            ; File geöffnet
  132.           Dos      Close                         ; Wenn nein weiter
  133. .3
  134.           move.l    memblock2,d0
  135.           beq.s     .4
  136.           move.l    d0,a1
  137.           move.l    filelänge2,d0
  138.           Exec      FreeMem
  139. .4
  140.  
  141.  
  142.  
  143. .end
  144.           closedos
  145.           moveq    #0,d0
  146.           rts
  147. ;\\
  148.  
  149. ;// Data
  150.  DATA
  151.  
  152. ver   dc.b "$VER: V0 - Written by DAC698 - Michael Roth",0
  153. ver2
  154. inputstr
  155.          dc.b      "Source/A,Dest/A",0;Key/A",0 ;KeyFile/S",0
  156. cr
  157.          dc.b      10,0
  158.  BSS
  159.  cnop 0,4
  160. arry     ds.l      2
  161. rdargs   ds.l      1
  162. fh       ds.l      1
  163. fh2      ds.l      1
  164. filelänge
  165.          ds.l      1
  166. memblock ds.l      1
  167. filelänge2
  168.          ds.l      1
  169. memblock2
  170.          ds.l      1
  171. insert   dc.b      4,0
  172. ;\\
  173.  
  174.